--content. With --no-pull, avoid downloading content, and with
--no-push avoid uploading content. This was done before, but
inconsistently.
- * sync: Added -g as a short option for --no-content.
* uninit: Avoid buffering the names of all annexed files in memory.
+ * sync: Started a transition to --content being enabled by default.
+ When used without --content or --no-content, warn about the upcoming
+ transition, and suggest using one of the options, or setting
+ annex.synccontent.
+ * sync: Added -g as a short option for --no-content.
-- Joey Hess <id@joeyh.name> Sat, 08 Apr 2023 13:57:18 -0400
, messageOption :: Maybe String
, pullOption :: Bool
, pushOption :: Bool
- , contentOption :: Bool
- , noContentOption :: Bool
+ , contentOption :: Maybe Bool
+ , noContentOption :: Maybe Bool
, contentOfOption :: [FilePath]
, cleanupOption :: Bool
, keyOptions :: Maybe KeyOptions
, messageOption = Nothing
, pullOption = False
, pushOption = False
- , contentOption = False
- , noContentOption = False
+ , contentOption = Just False
+ , noContentOption = Just False
, contentOfOption = []
, cleanupOption = False
, keyOptions = Nothing
)
PullMode -> pure False
PushMode -> pure True
- <*> switch
+ <*> optional (flag' True
( long "content"
<> help "transfer annexed file contents"
- )
- <*> switch
+ ))
+ <*> optional (flag' True
( long "no-content"
<> short 'g'
<> help "do not transfer annexed file contents"
- )
+ ))
<*> many (strOption
( long "content-of"
<> short 'C'
seek :: SyncOptions -> CommandSeek
seek o = do
+ warnSyncContentTransition o
+
prepMerge
startConcurrency transferStages (seek' o)
-
+
seek' :: SyncOptions -> CommandSeek
seek' o = do
let withbranch a = a =<< getCurrentBranch
shouldSyncContent :: SyncOptions -> Annex Bool
shouldSyncContent o
- | noContentOption o = pure False
+ | fromMaybe False (noContentOption o) = pure False
-- For git-annex pull and git-annex push,
-- annex.syncontent defaults to True unless set
| operationMode o /= SyncMode = annexsynccontent True
- | contentOption o || not (null (contentOfOption o)) = pure True
+ | fromMaybe False (contentOption o) || not (null (contentOfOption o)) = pure True
-- For git-annex sync,
-- annex.syncontent defaults to False unless set
| otherwise = annexsynccontent False <||> onlyAnnex o
HasGitConfig (Just c) -> return c
_ -> return d
+-- Transition started May 2023, should wait until that has been in a Debian
+-- stable release before completing the transition.
+warnSyncContentTransition :: SyncOptions -> Annex ()
+warnSyncContentTransition o
+ | operationMode o /= SyncMode = noop
+ | isJust (noContentOption o) || isJust (contentOption o) = noop
+ | not (null (contentOfOption o)) = noop
+ | otherwise = getGitConfigVal' annexSyncContent >>= \case
+ HasGlobalConfig (Just _) -> noop
+ HasGitConfig (Just _) -> noop
+ _ -> showwarning
+ where
+ showwarning = earlyWarning $
+ "git-annex sync will change default behavior to operate on"
+ <> " --content in a future version of git-annex. Recommend"
+ <> " you explicitly use --no-content (or -g) to prepare for"
+ <> " that change. (Or you can configure annex.synccontent)"
+
notOnlyAnnex :: SyncOptions -> Annex Bool
notOnlyAnnex o = not <$> onlyAnnex o
after upgrading to the repo version that enables this. Depending on the
timing of v11, this may need to be put in a v12 upgrade that is delayed
some amount of time (eg 1 year) after v11.
+
+* Finish the transition of git-annex sync defaulting to --content.
+ A warning was added in May 2023 when it's run in a way that will change
+ behavior. It would be good to wait until all git-annex users have
+ gotten the version with the warning, and used it for a while,
+ before finishing the transition. This does not need to be tied to a
+ repository version change really, but it would be reasonable to do so.